package demo7;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Spring容器管理对象时，一个生命周期的对应节点
 * **/
@Component
public class Person {
    private String name;

    public Person() {
        System.out.println("1：Person的构造方法被调用了");
    }

    public String getName() {
        return name;
    }
    @Value("张三")
    public void setName(String name) {
        System.out.println("2:name的set方法被调用了，初始化了name属性");
        this.name = name;
    }
    public void play(){
        System.out.println(name+"出去玩");
    }
    @PostConstruct
    public void gousi(){
        System.out.println("3:Spring 容器将Person对象初始化完毕了，name："+name);
    }
    /**
     * @preDestory,销毁前调用，在容器销毁Person对象之前调用内部所有的被preDestory注解的方法，通知脱离Spring
     * 容器管理（销毁前）
     * */
    @PreDestroy
    public void preDestory(){
        System.out.println("5:容器即将关闭，通知当前对象");
    }
    public void finalize(){
        //对象的临终遗言：绝对不能耗时，否则会阻塞垃圾回收器（GC）
    }
}
